#ifndef FERMAT_LIBHTTP_HTTP_COMMON_HEADER_H_
#define FERMAT_LIBHTTP_HTTP_COMMON_HEADER_H_
#include <string>
#include <cstdint>
#include <cstddef>

namespace fermat {
namespace libttp {

enum class HttpHeaderCode {
	kHttpHeaderNone = 0,
	kHttpHeaderOther = 1,
	kHttpHeaderCacheControl = 2,
	kHttpHeaderConnection = 3,
	kHttpHeaderContentDisposition = 4,
	kHttpHeaderContentEncoding = 5,
	kHttpHeaderContentLanguage = 6,
	kHttpHeaderContentLength = 7,
	kHttpHeaderContentLocation = 8,
	kHttpHeaderContentMD5 = 9,
	kHttpHeaderContentRange = 10,
	kHttpHeaderContentType = 11,
	kHttpHeaderCookie = 12, 
	kHttpHeaderDNT = 13,
	kHttpHeaderDate = 14,
	kHttpHeaderEtag = 15,
	kHttpHeaderExpect = 16,
	kHttpHeaderExpires = 17,
	kHttpHeaderFrom = 18,
	kHttpHeaderFrontEndHttps = 19,
	kHttpHeaderHost = 20,
	kHttpHeaderIfMatch = 21,
	kHttpHeaderIfModifySince = 22,
	kHttpHeaderIfNoneMatch = 23,
	kHttpHeaderIfRange = 24,
	kHttpHeaderIfUnmodifiedSice = 25,
	kHttpHeaderKeepAlive = 26,
	kHttpHeaderLastModified = 27,
	kHttpHeaderLink = 28,
	kHttpHeaderLocation = 29
	kHttpHeaderMaxForwards = 30,
	kHttpHeaderOrigin = 31,
	kHttpHeaderP3p = 32,
	kHttpHeaderPragma = 33,
	kHttpHeaderProxyAuthenticate = 34,
	kHttpHeaderProxyAuthorization = 35,
	kHttpHeaderProxyConnection = 36,
	kHttpHeaderRange = 37,
	kHttpHeaderReferer = 38,
	kHttpHeaderRefresh = 39,
	kHttpHeaderRetryAfter = 40,
	kHttpHeaderServer = 41,
	kHttpHeaderSetCookie = 42,
	kHttpHeaderStrictTransportSecurity = 43,
	kHttpHeaderTe = 44,
	kHttpHeaderTimestamp = 45,
	kHttpHeaderTrailer = 46,
	kHttpHeaderTransferEncoding = 47,
	kHttpHeaderUpgrade = 48,
	kHttpHeaderUserAgent = 49,
	kHttpHeaderVip = 50,
	kHttpHeaderVary = 51,
	kHttpHeaderVia = 52,
	kHttpHeaderWWWAuthenticate = 53,
	kHttpHeaderWarning = 54,
	kHttpHeaderAccept = 55,
	kHttpHeaderAcceptCharset = 56,
	kHttpHeaderAcceptDatetime = 57,
	kHttpHeaderAcceptEncoding = 58,
	kHttpHeaderAcceptLanguage = 59,
	kHttpHeaderAcceptRange = 60,
	kHttpHeaderAccessControlAllowCredentials = 61,
	kHttpHeaderAccessControlAllowHeaders = 62,
	kHttpHeaderAccessControlAllowMethod = 63,
	kHttpHeaderAccessControlAllowOrigin = 64,
	kHttpHeaderAccessControlExposeHeaders = 65,
	kHttpHeaderAccessControlMaxAge = 66,
	kHttpHeaderAccessControlRequestHeaders = 67,
	kHttpHeaderAccessControlRequestMethod = 68,
	kHttpHeaderAge = 69,
	kHttpHeaderAllow = 70,
	kHttpHeaderAltSvc = 71,
	kHttpHeaderAuthorization = 72,
	kHttpHeaderXAccelRedirect = 73,
	kHttpHeaderXContentSecurityPolicyReportOnly = 74,
	kHttpHeaderXContentTypeOptions = 75,
	kHttpHeaderXForwardedFor = 76,
	kHttpHeaderXForwardedProto = 77,
	kHttpHeaderXFrameOption = 78,
	kHttpHeaderXPoweredby = 79,
	kHttpHeaderXRealIP = 80,
	kHttpHeaderXrequestWith = 81,
	kHttpHeaderXUACompatible = 82,
	kHttpHeaderXWapProfile = 83,
	kHttpHeaderXXSSProtection = 84,
	kHttpHeaderFDebug = 200 //!< for fermat http debug option
};

class HttpCommonHeaders {
public:
	static HttpHeaderCode hash(const std::string & header);

	static const std::string* getPointerToHeaderName(HttpHeaderCode code);
};

}
}
#endif